package class3;

import common.ListNode;
import common.ListNodeUtils;

import java.util.HashSet;
import java.util.Set;

/**
 * https://leetcode.cn/problems/delete-nodes-from-linked-list-present-in-array/
 * 从链表中移除在数组中存在的节点
 */
public class Code30_modifiedList {
    public static void main(String[] args) {
        int[] nums = {1,2,3};
        ListNode listNode = ListNodeUtils.getLinked(1,2,3,4,5);
        ListNode ans = modifiedList(nums, listNode);
        ListNodeUtils.print(ans);
    }

    public static ListNode modifiedList(int[] nums, ListNode head) {
        Set<Integer> set = new HashSet<>();
        for (int num : nums) {
            set.add(num);
        }

        // 创建一个虚拟头节点，方便处理头节点删除的特殊情况
        ListNode d = new ListNode(0), pre = d;
        d.next = head;
        while (head != null) {
            if (set.contains(head.val)) {
                // 如果当前节点的值在 nums 中，删除当前节点
                pre.next = head.next;
            } else {
                // 否则，继续前进
                pre = head;
            }
            head = head.next;
        }
        return d.next;
    }
}
